home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / incl / LEDA / slist.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  2.8 KB  |  93 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  slist.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_SLIST_H
  16. #define LEDA_SLIST_H
  17.  
  18. //------------------------------------------------------------------------------
  19. // slist<T>  simply linked lists
  20. //------------------------------------------------------------------------------
  21.  
  22.  
  23. #include <LEDA/impl/slist.h>
  24.  
  25.  
  26.  
  27. template <class type>
  28.  
  29. class _CLASSTYPE slist : public SLIST {
  30.  
  31. type X;
  32.  
  33. int  cmp_el(GenPtr x, GenPtr y) const
  34.                              { return compare(ACCESS(type,x),ACCESS(type,y));}
  35. void print_el(GenPtr& x,ostream& out) const { Print(ACCESS(type,x),out);  }
  36. void read_el(GenPtr& x,istream& in)         { Read(X,in); x = Copy(X); }
  37. void clear_el(GenPtr& x)              const { Clear(ACCESS(type,x)); }
  38. void copy_el(GenPtr& x)               const { x = Copy(ACCESS(type,x)); }
  39.  
  40. int  int_type() const { return INT_TYPE(type); }
  41.  
  42. public:
  43.  
  44. slink* push(type a)             { return SLIST::push(Copy(a)); }
  45. slink* append(type a)           { return SLIST::append(Copy(a)); }
  46. slink* insert(type a, slink* l) { return SLIST::insert(Copy(a),l); }
  47.  
  48. void conc(slist<type>& l)       { SLIST::conc((SLIST&)l); }
  49.  
  50. slink* read_iterator(type& x) const 
  51. { GenPtr y; 
  52.   slink* p=SLIST::read_iterator(y);
  53.   if (p) x = ACCESS(type,y); 
  54.   return p; }
  55.  
  56. bool current_element(type& x) const {GenPtr y; bool b=SLIST::current_element(y);
  57.                                      if (b) x = ACCESS(type,y); return b; }
  58. bool next_element(type& x) const { GenPtr y; bool b = SLIST::next_element(y);
  59.                                    if (b) x = ACCESS(type,y); return b; }
  60.  
  61. type head()             const { return ACCESS(type,SLIST::head() ); }
  62. type tail()             const { return ACCESS(type,SLIST::tail() ); }
  63.  
  64. type pop()                    { GenPtr x=SLIST::pop(); 
  65.                                 type   y=ACCESS(type,x); 
  66.                                 Clear(ACCESS(type,x)); 
  67.                                 return y; }
  68.  
  69. type contents(slink* l) const { return ACCESS(type,SLIST::contents(l)); }
  70. type inf(slink* l)      const { return ACCESS(type,SLIST::contents(l)); }
  71.  
  72. GenPtr forall_loop_test(GenPtr it, type& x) const
  73. { if (it) x = contents(slist_item(it));
  74.   return it;
  75.  }
  76.  
  77.    slist() { }
  78.    slist(const slist<type>& a) : SLIST((SLIST&)a) { }
  79.    slist(type a) : SLIST(Convert(a)) { }
  80.    ~slist() {}
  81.  
  82.    slist<type>& operator=(const slist<type>& a)
  83.            { SLIST::operator=(a);  return *this; }
  84.  
  85.    slink* operator+=(type x)  { return append(x); }
  86.    slink* operator&=(type x)  { return push(x); }
  87.    type& operator[](slink* l) { return ACCESS(type,SLIST::entry(l)); }
  88. };
  89.  
  90.  
  91. #endif
  92.